import collections

Card=collections.namedtuple('Card',['paihao','huase'])
##Card=collections.namedtuple('Card','paihao huase')##这两个方式都可以用来生成一种对象
##注意使用字符串时,需要之间有空格

class Frenchdeck:
    paihaos=[str(n) for n in range(2,11)]+'J Q K A'.split()
    ##ranks=[str(n) for n in range(2,11)]+list('JQKA')##这两个方式用于由字符串生成列表
    huases='s d c h'.split()
    def __init__(self):
        self._jk=[Card(paihao,huase) for huase in self.huases for paihao in self.paihaos]
        ##用两个循环生成所有的实例
    def __len__(self):
            return len(self._jk)
    def __getitem__(self,po):
            return self._jk[po]##列表中元素的定位

deck=Frenchdeck()##默认生成所有的实例

len(deck)
deck[0]
deck[-1]


huasexu=dict(s=3,h=2,d=1,c=0)##字典生成，为了按花色排序，需要给花色赋值，用于排序

##>>> import random
##>>> random.choice([1,2,3,4])##choice用于从列表中随机取出一个对象
##3
##>>> random.choice([1,2,3,4])
##1

def huaseshineng(jk):##主要作用于列表中每个对象，用于排序，返回一个位置信息，如0表示重新排序的第一个位置
    paihao_=Frenchdeck.paihaos.index(jk.paihao)
    ##return paihao_*len(huasexu)+huasexu[jk.huase]
    return paihao_*len(huasexu)+huasexu.get(jk.huase)##字典的值的get方式
##sorted(deck,key=huaseshineng)


##>>> {'s':'1','g':'2'}['g']
##'2'
##>>> {'s':'1','g':'2'}.get('g')##字典的值由键取出的两个方法

##>>> huaseshineng(deck[5])
##23
##>>> 

##>>> huaseshineng(deck[26])##2，c原本排在26号，现在得排在第一位
##0##说明位于第一位
##>>> 
